
export function formatDate(time, pattern) {
  let str = pattern || 'yyyy-MM-dd'
  const date = new Date(time)
  
  const kv = [
    {key: /y+/, value: date.getFullYear()},
    {key: /M+/, value: date.getMonth() + 1},
    {key: /d+/, value: date.getDate()},
    {key: /H+/, value: date.getHours()},
    {key: /m+/, value: date.getMinutes()},
    {key: /s+/, value: date.getSeconds()},
  ]
  
  kv.forEach(item => {
    str = str.replace(item.key, function (val, index) {
      // console.log(val, index);
      if (val.indexOf('y') !== -1) {
        return val.length == 2 ? item.value.toString().substring(2) : item.value
      }
      return format(item.value.toString(), val.length)
    })
  })

  return str

  function format(str, len) {
    return str.length < len ? new Array(len - str.length).fill('0').join() + str : str
  }
}

/**
 * 返回当前时间距离time的描述
 * 刚刚 n分钟前 n小时前 n天前 具体时间
 * @param {string, number, Date} time 需要格式化的时间
 */
export function replyTime(time) {
  let date = new Date(time)
  // if (typeof time === 'string' || typeof time === 'number') {
  //   new Date(time)
  // } else {
  //   date = time
  // }
  const now = new Date()
  // console.log(time, time.getTime());
  const diff = now.getTime() - date.getTime()

  const obj = {
    seconds: diff / 1000,
    minutes: diff / 1000 / 60,
    hours: diff / 1000 / 60 / 60,
    day: diff / 1000 / 60 / 60 / 24
  }

  if (obj.seconds < 60) {
    return '刚刚'
  }
  if (obj.minutes < 60) {
    return Math.floor(obj.minutes) +'分钟前'
  }
  if (obj.hours < 24) {
    return Math.floor(obj.hours) +'小时前'
  }
  return formatDate(time)
}

/**
 * 防抖函数
 * @param {*} fn 函数
 * @param {*} delay 时间
 * @returns 
 */
export function debounce(fn, delay) {
  let timer = null; // 创建一个变量用于存放定时器
  
  // 返回一个函数
  return function() {
    const context = this; // 存储当前上下文
    const args = arguments; // 存储函数的参数数组

    clearTimeout(timer); // 在每次定时器执行前清除上一次的定时器

    timer = setTimeout(() => {
      fn.apply(context, args); // 延迟 delay 毫秒后执行函数，使用 apply 将上下文和参数传递给 fn 函数
    }, delay);
  };
}